Imagine que você é um arquiteto. Em vez de desenhar um plano fixo para uma única casa de tijolos, você cria um modelo mestre planta capaz de se adaptar a madeira, aço ou vidro. No C++, isso é Programação Genérica.
1. O Mecanismo da Planta
Uma lista de parâmetros de template (por exemplo, template <typename T>) introduz espaços reservados chamados parâmetros de tipo de template. Estes atuam como variáveis para tipos. Por exemplo, em template <typename T> ostream &print(ostream &os, const T &obj), T é determinado apenas quando a função é chamada.
2. Instanciação
O compilador não compila o template em si em código de máquina. Em vez disso, instanciação ocorre: o compilador gera uma versão específica do código apenas quando um argumento de template é fornecido. Por causa disso, as definições normalmente devem residir em arquivos de cabeçalho.
3. Escrevendo Código Independente de Tipo
Para maximizar a reutilização, siga a Melhor Prática: minimize requisitos. Escrever o código usando apenas o < operador (via less<T>) reduz os requisitos sobre os tipos em comparação com o uso de >, <=, e >=. A validação muitas vezes é adiada; o compilador geralmente não consegue encontrar muitos erros na fase de compilação do próprio template; a maioria aparece durante a instanciação.